j=i>0?m++:i<0?n++:k++; 结果如何
来源:百度知道 编辑:UC知道 时间:2024/05/30 03:48:54
#include "stdio.h"
main()
{
int i=1,j,m=0,n=0,k=0;
j=i>0?m++:i<0?n++:k++;
printf("%d\t%d\t%d\n",m,n,k);
}
结果为什么是1,0,0,谁解释一下,头有点晕
好像书上说A?B:C这个运算是右结合性呀,应该先算i<0?n++:k++才对呀
main()
{
int i=1,j,m=0,n=0,k=0;
j=i>0?m++:i<0?n++:k++;
printf("%d\t%d\t%d\n",m,n,k);
}
结果为什么是1,0,0,谁解释一下,头有点晕
好像书上说A?B:C这个运算是右结合性呀,应该先算i<0?n++:k++才对呀
因为i>0成立所以只执行了m++
--
原则上结合方式和求值顺序是两个概念。右结合只是说应该是
a ? (b ? c : d) : e
最先被求值的还是a。
再比如
a = b = c = d 结合关系是a = (b = (c = d)) 这里第一个等号是最顶级得运算符,左右分别是a和b = c = d。正常来讲求值都是从左到右的,也就是先求左边a的值。并不会因为结合关系而先求b = c = d的值。
但是C/C++里这玩意被搞得相当乱。
j=i>0?m++:i<0?n++:k++; 这段代码用常用的代码描述为:
if ( j = i > 0 ) {
m++;
}
else if ( i < 0 ) {
n++;
}
else {
k++;
}
你在开头定义了i = 1;m = 0, n = 0, k = 0,而j只定义了没有赋值所以在第一个选择语句条件j = i > 0是正确的,于是执行了m++,而n,k不变,所以输出是1,0,0
PS:你这个应该是用c++写的吧,建议你去找一些国外的经典c++教材比如:c++程序设计语言(特别版)来看,你的这段代码和标准c++不一致,可读性差,你如果真的想学好c++的话,养成好的代码书写习惯是很重要的
0?n++:k
j=(++i)+(++i)+(++i);
xx[i][j]+=xx[i][j]>>4与xx[i][j]=xx[i][j]+xx[i][j]>>4为什么不同?
xx[i][jj]+=xx[i][j]>>4
向量i(i+j)+j(2j+3j)=?
for(i=0;i<n-1;i++){ m=i;for(j=i+1;j<n;j++);----}为什么for(j=i+1;j<n;j++)的运行次数是n(n-1)/2次呢?
j=0 For i=1To10 Step3 j=j+i Next i j是多少?
for(i=0;i<m;i=i+m-1)与for(i=0;i<m;i=m-1)有什么不同?
for(i=j=0; s[i];i++)和for(i=j=0; s[i]!= '\0';i++) 应该一样吧?
C语言:j=i+(++i)
for(j=0;j<sqrt((double)i);j++); 设置断点查看时,j可以大于sqrt((double)i)